library(readr)
library(tidyverse)
library(sf)
library(sp)
library(viridis)
library(tigris)
options(tigris_use_cache = T)
Load Data and Add Census Tracts
df = read_csv("Final_Cleaned_Data.csv", col_types = cols(GEOID = "c"))
dc_tracts = tracts(state = "DC", cb = T, year = 2022)
Using FIPS code '11' for state 'DC'
df = left_join(df, dc_tracts %>%
select(c(GEOID, geometry, ALAND, AWATER)), by = "GEOID")
summary(df)
GEOID TotalPopulation DIABETES CASTHMA
Length:206 Min. :0.0000 Min. :0.0000 Min. :0.0000
Class :character 1st Qu.:0.2500 1st Qu.:0.2439 1st Qu.:0.2341
Mode :character Median :0.5000 Median :0.4976 Median :0.4951
Mean :0.4999 Mean :0.4956 Mean :0.4878
3rd Qu.:0.7500 3rd Qu.:0.7500 3rd Qu.:0.7488
Max. :1.0000 Max. :1.0000 Max. :1.0000
m1_1_sch_1 m1_2_qua_1 total_score crime_burden_per_1000
Min. :0.004854 Min. :0.1141 Min. :0.0000 Min. :0.0000
1st Qu.:0.253641 1st Qu.:0.2536 1st Qu.:0.6134 1st Qu.:0.2206
Median :0.507282 Median :0.5024 Median :1.5482 Median :0.4461
Mean :0.504854 Mean :0.5024 Mean :2.2279 Mean :0.6735
3rd Qu.:0.756068 3rd Qu.:0.7512 3rd Qu.:3.2874 3rd Qu.:0.9895
Max. :1.000000 Max. :1.0000 Max. :9.2010 Max. :3.0459
percentile weighted_mean_dist_m weighted_mean_percentile LOWINCOME
Min. :0.0000 Min. : 112.9 Min. : 4.733 Min. : 0.0
1st Qu.:0.2488 1st Qu.: 289.0 1st Qu.:22.588 1st Qu.: 277.0
Median :0.4976 Median : 450.6 Median :39.535 Median : 570.5
Mean :0.4976 Mean : 513.7 Mean :42.303 Mean : 800.6
3rd Qu.:0.7464 3rd Qu.: 669.6 3rd Qu.:58.700 3rd Qu.:1164.8
Max. :0.9951 Max. :1855.9 Max. :96.370 Max. :3181.0
LOWINCPCT UNEMPLOYED UNEMPPCT TRACT_COUNT_Alcohol_Li
Min. :0.00 Min. : 0.00 Min. :0.0000 Min. :0.0000
1st Qu.:0.25 1st Qu.: 43.25 1st Qu.:0.2500 1st Qu.:0.2049
Median :0.50 Median : 97.00 Median :0.5000 Median :0.4683
Mean :0.50 Mean :137.20 Mean :0.4998 Mean :0.4724
3rd Qu.:0.75 3rd Qu.:197.50 3rd Qu.:0.7500 3rd Qu.:0.7366
Max. :1.00 Max. :564.00 Max. :1.0000 Max. :1.0000
TRACT_COUNT_Grocery_St TRACT_COUNT_Healthy_Co TRACT_COUNT_Independen
Min. :0.0000 Min. :0.0000 Min. :0.0000
1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.0000
Median :0.0000 Median :0.0000 Median :0.0000
Mean :0.2520 Mean :0.2036 Mean :0.2131
3rd Qu.:0.6439 3rd Qu.:0.5634 3rd Qu.:0.7366
Max. :0.9902 Max. :1.0000 Max. :1.0000
TRACT_COUNT_Leaking_Un TRACT_COUNT_Metro_Bus_ TRACT_COUNT_Metro_Stat
Min. :0.0000 Min. :0.0000 Min. :0.0000
1st Qu.:0.1854 1st Qu.:0.2488 1st Qu.:0.0000
Median :0.4780 Median :0.4976 Median :0.0000
Mean :0.4705 Mean :0.4831 Mean :0.1480
3rd Qu.:0.7463 3rd Qu.:0.7317 3rd Qu.:0.0000
Max. :1.0000 Max. :1.0000 Max. :0.9854
TRACT_COUNT_Parks_and_ TRACT_COUNT_Police_Sta TRACT_COUNT_Primary_Ca
Min. :0.0000 Min. :0.00000 Min. :0.0000
1st Qu.:0.0000 1st Qu.:0.00000 1st Qu.:0.0000
Median :0.3805 Median :0.00000 Median :0.0000
Mean :0.3625 Mean :0.06784 Mean :0.1689
3rd Qu.:0.6976 3rd Qu.:0.00000 3rd Qu.:0.0000
Max. :1.0000 Max. :0.93171 Max. :1.0000
TRACT_COUNT_Recreation dist_to_m_Alcohol_Li dist_to_m_Grocery_St dist_to_m_Healthy_Co
Min. :0.0000 Min. :0.00 Min. :0.00 Min. :0.00
1st Qu.:0.0000 1st Qu.:0.25 1st Qu.:0.25 1st Qu.:0.25
Median :0.0000 Median :0.50 Median :0.50 Median :0.50
Mean :0.2857 Mean :0.50 Mean :0.50 Mean :0.50
3rd Qu.:0.6098 3rd Qu.:0.75 3rd Qu.:0.75 3rd Qu.:0.75
Max. :0.9854 Max. :1.00 Max. :1.00 Max. :1.00
dist_to_m_Independen dist_to_m_Leaking_Un dist_to_m_Metro_Bus_ dist_to_m_Metro_Stat
Min. :0.00 Min. :0.00 Min. :0.00 Min. :0.00
1st Qu.:0.25 1st Qu.:0.25 1st Qu.:0.25 1st Qu.:0.25
Median :0.50 Median :0.50 Median :0.50 Median :0.50
Mean :0.50 Mean :0.50 Mean :0.50 Mean :0.50
3rd Qu.:0.75 3rd Qu.:0.75 3rd Qu.:0.75 3rd Qu.:0.75
Max. :1.00 Max. :1.00 Max. :1.00 Max. :1.00
dist_to_m_Parks_and_ dist_to_m_Police_Sta dist_to_m_Primary_Ca dist_to_m_Recreation
Min. :0.0000 Min. :0.00 Min. :0.00 Min. :0.00
1st Qu.:0.2500 1st Qu.:0.25 1st Qu.:0.25 1st Qu.:0.25
Median :0.5000 Median :0.50 Median :0.50 Median :0.50
Mean :0.4999 Mean :0.50 Mean :0.50 Mean :0.50
3rd Qu.:0.7500 3rd Qu.:0.75 3rd Qu.:0.75 3rd Qu.:0.75
Max. :1.0000 Max. :1.00 Max. :1.00 Max. :1.00
TRACT_MEAN_ELEV TRACT_MED_ELEV TRACT_COUNT_Hospital TRACT_COUNT_Food_Access
Min. :0.0000 Min. :0.0000 Min. :0.00000 Min. :0.0000
1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.00000 1st Qu.:0.2488
Median :0.0000 Median :0.0000 Median :0.00000 Median :0.4976
Mean :0.2488 Mean :0.2485 Mean :0.06396 Mean :0.4547
3rd Qu.:0.7427 3rd Qu.:0.7415 3rd Qu.:0.00000 3rd Qu.:0.7256
Max. :1.0000 Max. :1.0000 Max. :1.00000 Max. :1.0000
TRACT_COUNT_Public_House ALAND AWATER geometry
Min. :0.0000 Min. : 93419 Min. : 0 POLYGON :206
1st Qu.:0.0000 1st Qu.: 290739 1st Qu.: 0 epsg:4269 : 0
Median :0.0000 Median : 507150 Median : 0 +proj=long...: 0
Mean :0.1766 Mean : 768525 Mean : 90824
3rd Qu.:0.0000 3rd Qu.: 907396 3rd Qu.: 2424
Max. :1.0000 Max. :6514228 Max. :5139082
df_sf = st_as_sf(df)
df_sf$centroids = st_centroid(df_sf$geometry)
Plot Data
ggplot(data = df_sf) +
geom_sf(aes(geometry = geometry, fill = dist_to_m_Metro_Stat), color = NA) +
geom_sf(aes(geometry = centroids, size = CASTHMA), color = "black", alpha = 0.4) +
scale_fill_viridis(alpha = 0.9) +
labs(title = "Plot of Distance to Metro Stations",
subtitle = "Percentile",
y = "Longitude", x = "Latitude",
fill = "Distance",
size = "Asthma")

library(plotly)
p = ggplot(data = df_sf) +
geom_sf(aes(geometry = geometry, fill = dist_to_m_Metro_Stat), color = NA) +
geom_sf(aes(geometry = centroids, size = CASTHMA), color = "black", alpha = 0.4) +
scale_fill_viridis(alpha = 0.9) +
labs(title = "Plot of Distance to Metro Stations",
subtitle = "Percentile",
y = "Longitude", x = "Latitude",
fill = "Distance",
size = "Asthma")
ggplotly(p)
Plot Individual Indexes
names = names(df[, -c(1, ncol(df))])
for(i in 1:(ncol(df) - 2)) {
plot = ggplot(data = df) +
geom_sf(aes(geometry = geometry, fill = !!sym(names[i])), col = NA) +
scale_fill_viridis(alpha = 0.9) +
labs(x = "Latitude", y = "Longitude",
title = paste("Plot of", names[i]),
subtitle = "Percentile")
ggsave(plot = plot, paste("./plots/", names[i], ".png", sep = ""))
}
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7cn0NCmxpYnJhcnkocmVhZHIpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoc2YpDQpsaWJyYXJ5KHNwKQ0KbGlicmFyeSh2aXJpZGlzKQ0KbGlicmFyeSh0aWdyaXMpDQpvcHRpb25zKHRpZ3Jpc191c2VfY2FjaGUgPSBUKQ0KYGBgDQoNCiMgTG9hZCBEYXRhIGFuZCBBZGQgQ2Vuc3VzIFRyYWN0cw0KDQpgYGB7cn0NCmRmID0gcmVhZF9jc3YoIkZpbmFsX0NsZWFuZWRfRGF0YS5jc3YiLCBjb2xfdHlwZXMgPSBjb2xzKEdFT0lEID0gImMiKSkNCmRjX3RyYWN0cyA9IHRyYWN0cyhzdGF0ZSA9ICJEQyIsIGNiID0gVCwgeWVhciA9IDIwMjIpDQoNCmRmID0gbGVmdF9qb2luKGRmLCBkY190cmFjdHMgJT4lDQogICAgICAgICAgICAgICAgIHNlbGVjdChjKEdFT0lELCBnZW9tZXRyeSwgQUxBTkQsIEFXQVRFUikpLCBieSA9ICJHRU9JRCIpDQpgYGANCg0KYGBge3J9DQpzdW1tYXJ5KGRmKQ0KYGBgDQoNCmBgYHtyfQ0KZGZfc2YgPSBzdF9hc19zZihkZikNCmRmX3NmJGNlbnRyb2lkcyA9IHN0X2NlbnRyb2lkKGRmX3NmJGdlb21ldHJ5KQ0KYGBgDQoNCiMgUGxvdCBEYXRhDQoNCmBgYHtyfQ0KZ2dwbG90KGRhdGEgPSBkZl9zZikgKyANCiAgZ2VvbV9zZihhZXMoZ2VvbWV0cnkgPSBnZW9tZXRyeSwgZmlsbCA9IGRpc3RfdG9fbV9NZXRyb19TdGF0KSwgY29sb3IgPSBOQSkgKyANCiAgZ2VvbV9zZihhZXMoZ2VvbWV0cnkgPSBjZW50cm9pZHMsIHNpemUgPSBDQVNUSE1BKSwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuNCkgKyANCiAgc2NhbGVfZmlsbF92aXJpZGlzKGFscGhhID0gMC45KSArDQogIGxhYnModGl0bGUgPSAiUGxvdCBvZiBEaXN0YW5jZSB0byBNZXRybyBTdGF0aW9ucyIsIA0KICAgICAgIHN1YnRpdGxlID0gIlBlcmNlbnRpbGUiLA0KICAgICAgIHkgPSAiTG9uZ2l0dWRlIiwgeCA9ICJMYXRpdHVkZSIsDQogICAgICAgZmlsbCA9ICJEaXN0YW5jZSIsDQogICAgICAgc2l6ZSA9ICJBc3RobWEiKQ0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeShwbG90bHkpDQpwID0gZ2dwbG90KGRhdGEgPSBkZl9zZikgKyANCiAgZ2VvbV9zZihhZXMoZ2VvbWV0cnkgPSBnZW9tZXRyeSwgZmlsbCA9IGRpc3RfdG9fbV9NZXRyb19TdGF0KSwgY29sb3IgPSBOQSkgKyANCiAgZ2VvbV9zZihhZXMoZ2VvbWV0cnkgPSBjZW50cm9pZHMsIHNpemUgPSBDQVNUSE1BKSwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuNCkgKyANCiAgc2NhbGVfZmlsbF92aXJpZGlzKGFscGhhID0gMC45KSArDQogIGxhYnModGl0bGUgPSAiUGxvdCBvZiBEaXN0YW5jZSB0byBNZXRybyBTdGF0aW9ucyIsIA0KICAgICAgIHN1YnRpdGxlID0gIlBlcmNlbnRpbGUiLA0KICAgICAgIHkgPSAiTG9uZ2l0dWRlIiwgeCA9ICJMYXRpdHVkZSIsDQogICAgICAgZmlsbCA9ICJEaXN0YW5jZSIsDQogICAgICAgc2l6ZSA9ICJBc3RobWEiKQ0KDQpnZ3Bsb3RseShwKQ0KYGBgDQoNCiMjIFBsb3QgSW5kaXZpZHVhbCBJbmRleGVzDQoNCmBgYHtyfQ0KbmFtZXMgPSBuYW1lcyhkZlssIC1jKDEsIG5jb2woZGYpKV0pDQpmb3IoaSBpbiAxOihuY29sKGRmKSAtIDIpKSB7DQogIHBsb3QgPSBnZ3Bsb3QoZGF0YSA9IGRmKSArDQogICAgZ2VvbV9zZihhZXMoZ2VvbWV0cnkgPSBnZW9tZXRyeSwgZmlsbCA9ICEhc3ltKG5hbWVzW2ldKSksIGNvbCA9IE5BKSArIA0KICAgIHNjYWxlX2ZpbGxfdmlyaWRpcyhhbHBoYSA9IDAuOSkgKyANCiAgICBsYWJzKHggPSAiTGF0aXR1ZGUiLCB5ID0gIkxvbmdpdHVkZSIsDQogICAgICAgICB0aXRsZSA9IHBhc3RlKCJQbG90IG9mIiwgbmFtZXNbaV0pLA0KICAgICAgICAgc3VidGl0bGUgPSAiUGVyY2VudGlsZSIpDQogIGdnc2F2ZShwbG90ID0gcGxvdCwgcGFzdGUoIi4vcGxvdHMvIiwgbmFtZXNbaV0sICIucG5nIiwgc2VwID0gIiIpKQ0KfQ0KYGBgDQo=